// pages/menu/index.ts
import { getProductCategoryList, getProductList } from '../../services/product';
import { getCartItems, getCartItemCount, getCartTotalPrice, createOrder, removeFromCart, updateItemCount, clearCart } from '../../services/cart';
import { CartItem } from '../../services/cart';

// 导入或定义类型
interface ProductCategory {
  id: number;
  name: string;
  status: number;
  sort: number;
  parentId: number;
  [key: string]: any;
}

interface Product {
  id: number;
  title: string;
  desc: string;
  price: number;
  image: string;
  categoryId: number;
  [key: string]: any;
}

Page({

  /**
   * 页面的初始数据
   */
  data: {
    productList: [] as Product[],
    categoryList: [] as ProductCategory[],
    activeCategory: 0,
    loading: false,
    cartCount: 0,
    cartTotalPrice: 0,
    cartItems: [] as CartItem[],
    showCartPopover: false
  },

  /**
   * 获取商品分类列表
   */
  async fetchCategoryList() {
    try {
      this.setData({ loading: true });
      const res = await getProductCategoryList();
      if (res.code === 0 && res.data.list.length > 0) {
        this.setData({
          categoryList: res.data.list,
          activeCategory: res.data.list[0].id
        });
        // 获取第一个分类的商品
        this.fetchProductList(this.data.activeCategory);
      }
    } catch (error) {
      console.error('获取商品分类失败', error);
      wx.showToast({
        title: '获取商品分类失败',
        icon: 'none'
      });
    } finally {
      this.setData({ loading: false });
    }
  },

  /**
   * 获取商品列表
   */
  async fetchProductList(categoryId: number) {
    try {
      this.setData({ loading: true });
      const res = await getProductList({ category: categoryId });
      if (res.code === 0) {
        this.setData({ productList: res.data.list });
      }
    } catch (error) {
      console.error('获取商品列表失败', error);
      wx.showToast({
        title: '获取商品列表失败',
        icon: 'none'
      });
    } finally {
      this.setData({ loading: false });
    }
  },

  /**
   * 点击分类
   */
  handleClickCategory(e: WechatMiniprogram.TouchEvent) {
    const category = e.currentTarget.dataset.item as ProductCategory;
    const categoryId = category.id;

    this.setData({
      activeCategory: categoryId
    });

    this.fetchProductList(categoryId);
  },

  /**
   * 更新购物车状态
   */
  updateCartStatus() {
    this.setData({
      cartCount: getCartItemCount(),
      cartTotalPrice: getCartTotalPrice(),
      cartItems: getCartItems()
    });
  },

  /**
   * 切换购物车弹出层
   */
  toggleCartPopover() {
    if (!this.data.cartCount && !this.data.showCartPopover) {
      return; // 如果购物车为空且弹出层关闭，不做任何操作
    }

    this.setData({
      showCartPopover: !this.data.showCartPopover,
      cartItems: getCartItems() // 刷新购物车项
    });
  },

  /**
   * 阻止冒泡
   */
  doNothing() {
    // 阻止事件冒泡
    return;
  },

  /**
   * 增加购物车商品数量
   */
  handleAddCartItem(e: WechatMiniprogram.TouchEvent) {
    const { id, skuId } = e.currentTarget.dataset;
    const cartItems = getCartItems();
    const item = cartItems.find(item => item.id === id && item.skuId === skuId);

    if (item) {
      updateItemCount(id, item.count + 1, skuId);
      this.updateCartStatus();
    }
  },

  /**
   * 减少购物车商品数量
   */
  handleReduceCartItem(e: WechatMiniprogram.TouchEvent) {
    const { id, skuId } = e.currentTarget.dataset;
    const cartItems = getCartItems();
    const item = cartItems.find(item => item.id === id && item.skuId === skuId);

    if (item && item.count > 1) {
      updateItemCount(id, item.count - 1, skuId);
      this.updateCartStatus();
    } else if (item && item.count === 1) {
      this.handleRemoveCartItem(e);
    }
  },

  /**
   * 从购物车移除商品
   */
  handleRemoveCartItem(e: WechatMiniprogram.TouchEvent) {
    const { id, skuId } = e.currentTarget.dataset;
    removeFromCart(id, skuId);
    this.updateCartStatus();

    if (this.data.cartCount === 0) {
      this.setData({ showCartPopover: false });
    }
  },

  /**
   * 清空购物车
   */
  handleClearCart() {
    wx.showModal({
      title: '提示',
      content: '确定要清空购物车吗？',
      success: (res) => {
        if (res.confirm) {
          clearCart();
          this.updateCartStatus();
          this.setData({ showCartPopover: false });
        }
      }
    });
  },

  /**
   * 处理结账
   */
  async handleCheckout() {
    if (this.data.cartCount === 0) {
      wx.showToast({
        title: '购物车为空',
        icon: 'none'
      });
      return;
    }

    try {
      const order = await createOrder();
      if (order) {
        wx.showToast({
          title: '下单成功',
          icon: 'success'
        });

        // 更新购物车状态
        this.updateCartStatus();

        // 关闭popover
        this.setData({ showCartPopover: false });

        // 可以跳转到订单详情页
        setTimeout(() => {
          wx.navigateTo({
            url: `/pages/order-detail/index?tradeNo=${order.tradeNo}`
          });
        }, 1500);
      }
    } catch (error) {
      console.error('结账失败', error);
    }
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad() {
    this.fetchCategoryList();
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 每次显示页面都更新购物车状态
    this.updateCartStatus();
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {
    // 隐藏购物车弹出层
    this.setData({ showCartPopover: false });
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    this.fetchCategoryList();
    wx.stopPullDownRefresh();
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})